perm filename FIX[AP,SYS] blob sn#033715 filedate 1973-04-07 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	PROGRAM TO ALLOW MANUAL CHANGING OF THE DATA IN A FILE.
C00003 00003	Main program.
C00005 00004	
C00008 ENDMK
C⊗;
;PROGRAM TO ALLOW MANUAL CHANGING OF THE DATA IN A FILE.

	TITLE	FIX


EXTERNAL DDT,JOBDDT

F←←0		;FLAGS
CH←4		;INPUT CHARACTER
BP←5		;BYTE POINTER
I←6		;COUNTER
A←7
PPN←10		;FILE PPN
C←11

DSK17:	17
	SIXBIT	/DSK/
	0

MAXLEN←10000		;maximum allowable size of file

FILEF:	BLOCK	4	;lookup/enter block for file

FILE:	BLOCK	MAXLEN	;array for holding entire file in core

CMD:	IOWD	1,FILE	;dump mode command for reading/writing the file
	0

CR←15  LF←12

;flag bits in AC F

GOTEXT←1
MOD←2
GOTP←4
GOTPN←10
;Main program.

REESET:	CLRBFI
	OUTSTR	[ASCIZ /
Bad filename!
/]

FIX:	OUTSTR	[ASCIZ /

TYPE FILENAME: /]
	MOVEI	I,6		;limit filename to 6 chars
	MOVE	BP,[POINT 6,FILEF]
	SETZB	F,FILEF
	SETZB	PPN,FILEF+1
	INCHWL	CH
	CAIN	CH,"."
	JRST	REESET
GETNAM:	TRZ	CH,40		;convert char to sixbit
	TRZE	CH,100
	TRO	CH,40
	SOJL	I,.+2
	IDPB	CH,BP
TEST:	INCHWL	CH
	CAIE	CH,"]"		;END OF P,PN?
	CAIN	CH,CR		;END OF INPUT?
	JRST	ENDNAM		;YES TO ONE OF THESE
	CAIN	CH,"["		;PROJECT NEXT?
	JRST	GETP		;YES
	CAIN	CH,","		;PROGRAMMER NAME NEXT?
	JRST	GETPN		;YES
	CAIE	CH,"."		;EXTENSION NEXT?
	JRST	GETNAM		;NO
GETEXT:	TLOE	F,GOTEXT	;MAKE SURE WE DONT ALREADY HAVE AN EXTENSION
	JRST	REESET
	MOVE	BP,[POINT 6,FILEF+1]
GOON:	MOVEI	I,3
	JRST	TEST
GETP:	TLOE	F,GOTP		;MAKE SURE WE DONT ALREADY HAVE A PROJECT
	JRST	REESET
	MOVE	BP,[POINT 6,PPN]	;PUT PROJECT INTO LEFT HALF OF PPN
	JRST	GOON
GETPN:	TLON	F,GOTPN		;MAKE SURE WE DONT ALREADY HAVE A PROGRAMMER NAME
	TLNN	F,GOTP		;MAKE SURE WE DO HAVE A PROJECT
	JRST	REESET
	SETZ	C,
	MOVE	BP,[POINT 6,C,17]	;PUT PROGRAMMER NAME INTO RIGHT HALF OF C
	JUMPLE	I,GOON
	LSH	PPN,-6		;RIGHT-JUSTIFY PROJECT IN LEFT HALF OF PPN
	SOJG	I,.-1
	JRST	GOON


ENDNAM:	CLRBFI					;FORGET INPUT AFTER "]" OR CR
	TLNN	F,GOTP				;PROJECT SPECIFIED?
	JRST	END1				;NO
	TLNN	F,GOTPN				;PROGRAMMER NAME?
	JRST	END2				;NO
	JUMPLE	I,END4				;YES.  ALREADY RIGHT JUSTIFIED?
	LSH	C,-6				;NO.  DO IT NOW.
	SOJG	I,.-1
	JRST	END4
END2:	JUMPLE	I,END5				;PROJECT RIGHT JUSTIFIED?
	LSH	PPN,-6				;NO.  DO IT NOW.
	SOJG	I,.-1
END5:	SETZ	C,				;GET OWN DISK PPN
	DSKPPN	C,
END4:	HRR	PPN,C				;COMBINE P & PN IN PPN

END1:	OPEN	1,DSK17
	HALT	.
	MOVEM	PPN,FILEF+3			;PUT PPN IN LOOKUP BLOCK
	LOOKUP	1,FILEF
	JRST	[OUTSTR [ASCIZ\
LOOKUP FAILED!
\]
		JRST FIX]
	HLRE	A,FILEF+3
	JUMPE	A,[OUTSTR [ASCIZ\
EMPTY FILE!
\]
		JRST END9]
	CAMGE	A,[-MAXLEN]
	JRST	[RELEAS	1,
		 OUTSTR	[ASCIZ /
File is too big for FIX.
/]
		 EXIT]
	HRLM	A,CMD
	IN	1,CMD
	JRST	.+2
	HALT	.
	TRNE	A,1				;WORD COUNT EVEN?
	SUBI	A,1				;NO.  MAKE IT EVEN
	HRLM	A,CMD
END9:	RELEAS	1,
	OUTSTR	[ASCIZ /Modify the file? /]
	TLZ	F,MOD
	INCHRW	CH
	CAIN	CH,CR				;CR?
	INCHRW	CH				;YES.  READ THE LF
	CAIE	CH,"Y"
	CAIN	CH,"y"
	TLOA	F,MOD
	JRST	NOMOD
	OPEN	1,DSK17
	HALT	.
	HLLZS	FILEF+1
	SETZM	FILEF+2
	MOVEM	PPN,FILEF+3			;PUT PPN IN ENTER BLOCK
	ENTER	1,FILEF
	JRST	[OUTSTR [ASCIZ\
ENTER FAILED!
\]
		TLZ F,MOD
		JRST NOMOD] 
NOMOD:	OUTSTR	[ASCIZ /
File read in.
/]
	JRST	@JOBDDT

WRITE:	TLNN	F,MOD
	JRST	[OUTSTR	[ASCIZ /
You said no modification!
/]
		 CALLI	1,12
		 JRST	FIX]
	OUT	1,CMD
	JRST	.+2
	HALT	.
	RELEAS	1,
	RESET
	OUTSTR	[ASCIZ /

New file written.
/]
	CALLI	12			;EXIT
	END	FIX